#include "speech.h"
Speech::Speech(QObject *parent) : QObject(parent)
{

}
QString Speech::getJsonValue(QString key,QByteArray replyData)
{
    QJsonParseError parseError;
    //1.先将返回的数据转换成json文件
    QJsonDocument jsonDocument=QJsonDocument::fromJson(replyData,&parseError);
    if(parseError.error==QJsonParseError::NoError)
    {
        //json文件对象是否存在
        if(jsonDocument.isObject())
        {
            //将json文件对象转换成json对象
            QJsonObject jsonObj=jsonDocument.object();
            if(jsonObj.contains(key))
            {
                QJsonValue jsonValue=jsonObj.value(key);
                if(jsonValue.isString())//第一次获取token是string
                {
                    return jsonValue.toString();
                }
                else if(jsonValue.isArray())//第二次是识别结果数组
                {
                    QJsonArray jsonArray=jsonValue.toArray();
                    QJsonValue result=jsonArray.at(0);
                    return result.toString();
                }
            }
        }
    }
    return "";
}
QString Speech::SpeechReconition(QString fileNameAndPath)
{
    //1.先获取aceess_token（把appId+sceretKey传过去）
    QString access_token;
    //先组合url
    QString tokenUrl=baidu_tokenUrl.arg(client_id).arg(client_secret);
    //封装好需要的数据
    QMap<QString,QString> header;
    header.insert(QString("Content-Type"),QString("audio/pcm;rate=16000"));
    //发送的数据
    QByteArray requestData;
    //服务器返回的数据
    QByteArray replyData;
    //发送请求
    HttpRequest m_http;
    bool result=m_http.post_request(tokenUrl,header,requestData,replyData);
    if(result)
    {
        QString key="access_token";
        access_token=getJsonValue(key,replyData);
    }
    //2.获取识别结果
    QString speechUrl=speech_Url.arg(QHostInfo::localHostName()).arg(access_token);
    //打开音频文件并且转换成QByteArray
    QFile file;
    file.setFileName(fileNameAndPath);
    file.open(QIODevice::ReadOnly);
    requestData=file.readAll();
    file.close();

    //清除上一次答复的数据
    replyData.clear();
    result=m_http.post_request(speechUrl,header,requestData,replyData);
    //qDebug()<<"token是:"<<access_token<<endl;
    //解析server返回的数据
    if(result)
    {
        QString key="result";
        QString returnText=getJsonValue(key,replyData);
        return returnText;
    }
    else
    {
        QMessageBox::warning(NULL,"warning","识别失败请重试");
        return "";
    }
}
